기본 키는 관계형 데이터베이스에서 테이블의 각 행을 고유하게 식별하는 데 사용되는 키이다. SQL 표준에서는 `PRIMARY KEY` 제약 조건을 사용하여 정의하며, 테이블 생성 시 또는 `ALTER TABLE` 문을 사용하여 기존 테이블에 추가할 수 있다. 기본 키는 데이터 크기가 작고 불변하는 속성을 선택하는 것이 좋으며, 인공 키, 자연 키, 대체 키 등의 종류가 있다. 기본 키 선택에 대한 논쟁과 함께 한국적 관점, 활용 예시 등이 존재한다.
더 읽어볼만한 페이지
데이터 모델링 - 빌딩 정보 모델링 빌딩 정보 모델링(BIM)은 건축물의 전 생애주기 동안 발생하는 정보를 디지털 모델로 통합 관리하는 프로세스이다.
데이터 모델링 - 저장 프로시저 저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.
데이터베이스 관리 시스템 - 트랜잭션 처리 트랜잭션 처리는 데이터베이스 시스템에서 데이터의 일관성과 무결성을 보장하기 위한 기술이며, ACID 속성을 통해 데이터 정확성을 유지하고 롤백, 데드락 처리 등의 기술을 활용한다.
데이터베이스 관리 시스템 - 저장 프로시저 저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.
데이터베이스 - 지식 베이스 지식 베이스는 특정 주제 정보를 체계적으로 저장 및 관리하며 규칙 기반 추론으로 새로운 지식 도출에 활용되고, 웹 콘텐츠 관리 및 지식 관리 시스템으로 확장되어 온톨로지를 이용, 인공지능 기술과 결합하여 문제 해결책을 제시하고 경험을 통해 학습하는 시스템이다.
데이터베이스 - 화이트리스트 화이트리스트는 특정 대상만 허용하고 나머지는 차단하는 접근 제어 목록으로, 정보보안, 무역, 금융 등 다양한 분야에서 활용되지만, 목록 선정 기준의 불명확성, 사회적 문제점 등의 위험성으로 투명하고 엄격한 관리가 필요하다.
직원 ID (EmployeeID) 제품 ID (ProductID) 주문 ID (OrderID)
추가 정보
복합 키
둘 이상의 필드로 구성된 기본 키
대리 키
테이블에 대한 고유 식별자로만 사용되는 인공 필드
2. 기본 키의 정의 및 특징
관계형 데이터베이스 모델에서 기본 키는 테이블 내에서 특정 레코드를 유일하게 식별하는 데 사용된다. 기본 키는 하나 이상의 열로 구성될 수 있으며, 이를 복합 키라고 한다. 기본 키 제약 조건은 데이터 중복을 방지하고, 참조 무결성을 유지하는 데 중요한 역할을 한다. 기본 키는 암시적으로 `NOT NULL` 제약 조건을 가지며, 이는 해당 열에 NULL 값이 들어갈 수 없음을 의미한다.[1]
기본 키는 증가하는 정수, 범용 고유 식별자(UUID)일 수 있으며, 하이/로우 알고리즘을 사용하여 생성할 수도 있다.
학생 명부(학생 번호, 학생 이름, 반)라는 관계의 경우, 학생 번호가 주 키가 될 수 있다. 동명이인을 고려하면, 학생 번호는 유일한 후보 키이므로, 대리 키는 없다.
정・부・시・군・구(일본)(町村, ちょうそん, ちょうむら, ちょう) (정촌ID, 정촌명, 군명, 도도부현명)이라는 관계의 경우, 정촌ID와 {도도부현명, 군명, 정촌명}이 후보 키이며, 어느 쪽이든 주 키가 될 수 있다. 예를 들어, 정촌ID를 주 키로 한 경우, {도도부현명, 군명, 정촌명}은 대리 키가 된다.
2. 1. SQL에서의 기본 키 정의
SQL:2003 표준에서는 `PRIMARY KEY` 제약 조건을 사용하여 기본 키를 정의한다. `CREATE TABLE` 문을 사용하여 테이블 생성 시 기본 키를 지정하거나, `ALTER TABLE` 문을 사용하여 기존 테이블에 기본 키를 추가할 수 있다.[1]
기존 테이블에 기본 키 제약 조건을 추가하는 구문은 다음과 같다.[1]
```sql
ALTER TABLE
ADD [ CONSTRAINT ]
PRIMARY KEY ( [ {, }... ] )
```
테이블 생성 시 기본 키를 직접 지정할 수도 있다. SQL 표준에서 기본 키는 하나 이상의 열로 구성될 수 있다. 기본 키에 참여하는 각 열은 암시적으로 `NOT NULL`로 정의된다. 일부 RDBMS에서는 기본 키 열을 명시적으로 `NOT NULL`로 표시해야 한다.[1]
```sql
CREATE TABLE table_name (
...
)
```
기본 키가 단일 열로만 구성된 경우, 다음 구문을 사용하여 해당 열을 표시할 수 있다.[1]
기본 키는 관계형 데이터베이스에서 각 튜플(레코드)을 고유하게 식별하는 역할을 한다. 기본 키는 형태나 기능 면에서 다른 키와 다르지 않지만, 테이블에서 "선호되는" 식별자 역할을 하거나, 외래 키 참조에 사용되는 등 몇 가지 기술적인 특징을 가진다.
기본 키를 선택할 때는 다음과 같은 사항을 고려해야 한다.
불변성: 기본 키는 변경되지 않아야 한다. 한 번 설정된 값은 바뀌거나 재사용되지 않고, 관련 레코드와 함께 삭제되어야 한다.[1] 예를 들어, 학생 명부에서 학생 번호는 변경되지 않으므로 기본 키로 적합하다.
데이터 크기: 검색 및 다른 테이블과의 관계에서 자주 사용되므로, 가능한 한 데이터 크기가 작은 것이 좋다. 따라서 복합 키보다는 단일 열 기본 키가 선호된다.
간결성: 전화나 서면으로 전달될 가능성을 고려하여, 간결하고 명확하게 전달할 수 있는 형식이 좋다. 일정 자릿수의 알파벳이나 숫자로 이루어진 기본 키가 유리하다.
예를 들어, 일본의 [정・부・시・군・구](일본)(町村, ちょうそん, ちょうむら, ちょう) 관계에서는 정촌ID와 {도도부현명, 군명, 정촌명}이 모두 후보 키가 될 수 있다. 이 경우, 데이터 크기가 작고 불변성을 보장하는 정촌ID를 기본 키로 선택하는 것이 일반적이다.
만약 후보 키 중에서 적절한 기본 키를 찾기 어렵다면, 인공 키를 도입하는 것을 고려할 수 있다.
3. 1. 인공 키 (Surrogate Key)
인공 키는 시스템이 생성하는 고유 식별자로, 자연 키 대신 사용된다. 일련번호, 범용 고유 식별자(UUID) 등이 인공 키의 예시이다. 자연 키가 복잡하거나 변경될 가능성이 있을 때, 인공 키를 사용하여 데이터 무결성을 유지하고 성능을 향상시킬 수 있다.[1]
관계 내에서 튜플을 고유하게 식별하는 자연 키가 소프트웨어 개발에 사용하기 불편한 경우가 있다. 예를 들어 자연 키가 여러 열이나 큰 텍스트 필드를 포함하는 경우이다. 이러한 경우 대리 키를 기본 키 대신 사용할 수 있다.[1]
자연 키는 관계에 불필요한 속성을 추가할 필요가 없다는 장점이 있지만, 복합 키가 되기 쉽고 외부 상황 변화에 따라 변경이 필요하다는 단점이 있다. 반면 인공 키는 자체로 의미를 가지지 않으므로 불변성을 유지하여 이러한 문제를 피할 수 있다.[1]
3. 2. 자연 키 (Natural Key)
자연 키는 시스템 외부에서 의미를 가지는 데이터 열을 기본 키로 사용하는 것을 의미한다. 주민등록번호, 이메일 주소 등이 자연 키가 될 수 있다.
자연 키는 직관적이고 이해하기 쉽다는 장점이 있지만, 개인 정보 보호 문제나 데이터 변경 가능성 때문에 주의해서 사용해야 한다. 예를 들어, 주민등록번호는 개인 정보 유출의 위험이 있고, 이메일 주소는 사용자가 변경할 수 있다.
관계형 데이터베이스에서 후보 키가 여러 개 있을 때, 어떤 것을 주 키(기본 키)로 선택해도 논리적으로는 문제가 없다. 그러나 실용적으로는 다음과 같은 지침에 따라 선택하는 것이 좋다.
주 키는 검색 키로 이용되거나 다른 관계에서 참조될 확률이 높으므로, 가능한 한 데이터량이 작은 것이 좋다. 복합 키는 그다지 적합하지 않다. 데이터량이 많은 키밖에 없는 경우에는 인공 키를 설정하는 경우가 있다.
주 키는 검색 키로 이용되는 것 외에 전화나 서면으로 전달되는 경우도 많으므로, 간결하고 확실하게 전달할 수 있는 형식이 바람직하다. 일정 자릿수의 알파벳이나 숫자로 이루어진 주 키가 이 점에서도 우수하다.
주 키는 해당 관계 외부(다른 관계, 외부 시스템, 사용자 등)에서 식별자로 이용될 확률이 높으므로, 변경되지 않는 항목이 좋다. 다른 관계에서 주 키를 사용하고 있는 경우, 주 키를 변경하면 다른 관계의 값(외래 키)도 동시에 변경해야 하기 때문이다. 외부 시스템 등에 존재하는 데이터에 대해서는 이러한 변경이 불가능할 수 있다. 인공 키는 일반적으로 그 자체로 의미를 갖지 않기 때문에 변경되지 않으므로 이 문제를 피할 수 있다.
3. 3. 대체 키 (Alternate Key)
일반적으로 하나의 후보 키가 기본 키로 선택된다. 다른 후보 키들은 대체 키가 되며, 각 대체 키에는 중복을 방지하기 위해 `UNIQUE` 제약 조건이 할당될 수 있다.
대체 키는 단일 테이블 선택 또는 ''where'' 절에서 필터링할 때 기본 키처럼 사용될 수 있지만, 일반적으로 여러 테이블을 조인하는 데는 사용되지 않는다.
4. 기본 키와 관련된 논쟁
관계형 모델은 관계적 미적분과 관계 대수를 통해 표현되는데, 기본 키와 다른 종류의 키를 구별하지 않는다. 기본 키는 주로 응용 프로그래머의 편의를 위해 SQL 표준에 추가되었다.
대리 기본 키의 인기로 인해, 많은 개발자와 이론가들은 대리 기본 키를 관계형 데이터 모델의 양도할 수 없는 부분으로 간주하기도 한다. 이는 객체 지향 프로그래밍 모델에서 관계형 모델로의 원칙 이주로 인해 하이브리드 객체-관계형 모델이 생성된 데 기인한다. ORM과 같은 액티브 레코드 패턴에서 다음과 같은 추가적인 제약 조건이 기본 키에 적용되기도 한다.
기본 키는 불변이어야 한다. 즉, 변경되거나 재사용되어서는 안 되며, 관련 레코드와 함께 삭제되어야 한다.
기본 키는 익명의 정수 또는 숫자 식별자여야 한다.
그러나 이러한 제약 조건은 관계형 모델 또는 모든 SQL 표준의 일부가 아니다. 데이터베이스 및 애플리케이션 설계 중에 기본 키 값의 불변성을 결정할 때 주의 의무를 적용해야 한다. 일부 데이터베이스 시스템은 기본 키 열의 값을 `UPDATE` SQL 문을 사용하여 변경할 수 없음을 암시하기도 한다.
후보 키가 여러 개 있을 때, 튜플을 식별하는 기능에서 그들 사이에 차이가 없으므로 주 키로 무엇을 선택해도 논리적으로는 문제가 없다. 그러나 실용상으로는 다음과 같은 지침에 따라 선택하는 것이 좋다.
주 키는 검색 키로 이용되거나, 다른 관계에 참조하기 위해 저장될 확률이 높기 때문에, '''가능한 한 데이터량이 작은 것이 좋다'''. 따라서, 복합 키는 적합하지 않다. 데이터량이 많은 키밖에 없는 경우에는 인공 키(후술)를 설정하는 경우가 있다.
주 키는 검색 키로 이용되는 것 외에, 전화나 서면으로 전달되는 경우도 많으므로, 간결하고 확실하게 전달할 수 있는 형식이 바람직하다. 일정 자릿수의 알파벳이나 숫자로 이루어진 주 키는 이 점에서도 우수하다.
주 키는 해당 관계의 외부(다른 관계나, 외부 시스템, 사용자 등)에서 식별자로 이용될 확률이 높기 때문에, 불변(immutable)이어야 한다. 즉, '''갱신이 일어나지 않는 항목이 좋다'''. 예를 들어, 다른 관계에서 주 키를 사용하고 있는 경우, 주 키를 갱신하면 다른 관계의 값(외래 키)도 동시에 갱신해야만 한다. 또한, 외부 시스템 등에 존재하는 데이터에 대해서는 이러한 갱신이 불가능할 수 있다. 참고로, 인공 키는 일반적으로 그 자체로 의미를 갖지 않기 때문에 불변이므로, 이 문제도 피할 수 있다.
연번(순서, 시퀀스)과 같이, 유일성을 확보하기 위해서만 시스템 내부에서 생성되고 사용자가 관여하지 않는 정보를 저장하는 속성으로 구성된 기본 키를 '''인공 키''', 인위 키, 별명 키, 대체 키 등으로 부른다. 반대로 시스템 외부에서 저장해야 할 것으로 주어지는 정보를 저장하는 속성으로 구성된 기본 키를 '''자연 키'''라고 부른다.
에드거 F. 코드는 인공 키의 값이 사용자에게 제시되거나, 사용자가 발행하는 쿼리의 키가 되지 않아야 한다고 정의했다. 그러나 일반적으로는 단순히 사용자의 의향과 관계없이 시스템이 생성하는 것을 넓게 인공 키라고 부르는 경우도 많다.
설계된 관계의 속성에 후보 키가 없는 경우에는 인공 키를 추가할 수밖에 없다. 그러나 그렇지 않은 경우에도 인공 키를 추가해야 할지, 아니면 자연 키를 사용해야 할지에 대한 논쟁이 있다. 자연 키는 관계에 불필요한 속성을 추가할 필요가 없다는 장점이 있지만, 복합 키가 되기 쉽고, 외부 상황이 변화하면 변경도 필요하므로, 앞서 언급한 지침에서 볼 때 바람직하지 않은 선택이 될 수 있다. 인공 키의 장점과 단점은 그 반대이다. 실제로는 이러한 득실의 균형은 경우에 따라 다르므로, 케이스 바이 케이스로 판단해야 한다.
5. 기본 키의 활용 예시 (일본 문서 참고)
학생 명부에서 학생 번호는 기본 키로 사용될 수 있다. 학생 번호는 동명이인이 있더라도 유일하게 학생을 식별할 수 있는 후보 키이다.[1]
일본의 정・부・시・군・구(町村) 정보에서 정촌ID(정·부·시·군·구 ID) 또는 {도도부현명, 군명, 정촌명}은 후보 키가 될 수 있다. 예를 들어 정촌ID를 기본 키로 사용하면 {도도부현명, 군명, 정촌명}은 대체 키가 된다.[2]
참조
[1]
웹사이트
Add or change a table's primary key in Access
https://support.offi[...]
Microsoft
2020-01-20
[2]
Oracle FAQ
Alternate key
http://www.orafaq.co[...] [3]
서적
The Relational Database Dictionary
O'Reilly Media
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.